#pragma once

#include <string>
#include <vector>

namespace Util
{
    class string
    {
    public:

        /**
         * @brief 将字符串按指定分隔符拆分成多个子字符串。

         * @param src 源字符串，待拆分的字符串。
         * @param step 分隔符字符串，用于拆分源字符串。
         * 
         * @return 包含拆分后子字符串的std::vector<std::string>。
         * 
         * @details 此函数通过指定的分隔符(step)将源字符串(src)拆分成多个子字符串，并将这些子字符串存储在std::vector<std::string>中返回。
         *          若未找到分隔符，则返回整个剩余的源字符串作为最后一个子字符串。
         */
        static std::vector<std::string> split(const std::string& src, const std::string& step)
        {
            std::vector<std::string> res;
            size_t index = 0; // 表示找到目标地址下标
            size_t pos = 0; // 表示当前下标
            while (pos < src.size())
            {
                index = src.find(step, pos);
                if (index == std::string::npos)
                {
                    res.push_back(src.substr(pos));
                    break;
                }
                
                if (pos == index)
                {
                    pos += step.size();
                    continue;
                }

                res.push_back(src.substr(pos, index-pos));
                pos = index + step.size();
            }
            return res;
        }
    };
}